// 通用响应接口
export interface ApiResponse<T = any> {
  success: boolean
  code: number
  message: string
  data: T
}

// 分页查询参数
export interface PageParams {
  page: number
  pageSize: number
}

// 分页结果
export interface PageResult<T> {
  total: number
  result: T[]
}

// 权限基础接口
export interface Permission {
  id: number
  permissionName: string    // 菜单名称
  parentId: number | null   // 父级ID，null表示顶级
  type: number            // 0-目录 1-菜单 2-操作按钮
  menuUrl: string         // 菜单路由地址
  permissionStatus: string // enabled|disabled
  show: number            // 0-隐藏 1-显示
  icon: string            // 菜单图标（URL或antd图标名）
  permissionKey: string   // 权限唯一标识
  sort: number            // 排序字段
  createdBy: string | null
  createdTime: string | null
  updateBy: string | null
  updateTime: number | string | null  // 可能是时间戳或字符串
  isDeleted: number       // 0-未删除 1-已删除
}

// 树形权限结构
export interface PermissionTree extends Permission {
  children?: PermissionTree[]
}

// 权限分页查询参数
export interface PermissionPageParams extends PageParams {
  id?: number
  permissionName?: string
  parentId?: number
  type?: number
  menuUrl?: string
  permissionStatus?: string
  show?: number
  icon?: string
  permissionKey?: string
  sort?: number
  createdBy?: string
  createdTime?: string
  updateBy?: string
  updateTime?: string
  isDeleted?: number
}

// 角色信息接口
export interface Role {
  id: number
  roleName: string        // 角色名称
  roleKey: string         // 角色标识
  roleStatus: string      // enabled|disabled
  createdTime: string
  createdBy: string
  updateTime: string
  updateBy: string
  isDeleted: number
  authPermissionResponseVOS: Permission[] // 关联权限列表
}

// 角色分页查询参数
export interface RolePageParams extends PageParams {
  id?: number
  roleName?: string
  roleKey?: string
  roleStatus?: string
  createdTime?: string
  createdBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
}

// 用户信息接口
export interface User {
  id: number
  userType: string
  openid: string
  nickName: string
  avatar: string
  schoolId: number
  studentId: string
  email: string
  defaultAvatar: string
  defaultNickName: string
  sex: number
  phone: string
  grade: string
  userStatus: string
  createTime: string
  createBy: string
  updateTime: string
  updateBy: string
  isDeleted: number
  lastLoginTime: string
  lastIp: string
  loginCount: number
  stellarMeetCode: number
  roleKeys: string[]      // 用户角色标识数组
}

// 学校信息接口
export interface School {
  id: number
  schoolName: string       // 学校名称
  campuses: string        // 校区
  schoolStatus: string    // 学校状态：active-激活/inactive-未激活
  schoolAvatar: string    // 学校头像
  longitude: number       // 经度
  latitude: number        // 纬度
  createdTime: string      // 创建时间
  createdBy: string        // 创建人
  updateTime: string      // 修改时间
  updateBy: string        // 修改人
  isDeleted: number       // 是否删除：1-删除/0-未删除
  address?: string        // 学校地址（可选）
  schoolAdmins?: string[] // 学校管理员名称数组（可选）
}

// 带统计信息的学校接口（用于管理员查看）
export interface SchoolWithStats extends Omit<School, 'createTime'> {
  schoolAdmins: string[]   // 学校管理员列表
  userCount: number        // 学校用户数量
  campusCount: number      // 学校校区数量
  createdTime: string      // 创建时间（API返回的字段名）
}

// 学校分页查询参数
export interface SchoolPageParams extends PageParams {
  id?: number
  schoolName?: string
  campuses?: string
  schoolStatus?: string
  schoolAvatar?: string
  longitude?: number
  latitude?: number
  createdTime?: string
  createdBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
}

// 用户角色关联
export interface UserRole {
  id: number
  userId: number
  roleId: number
  createdBy: string
  createdTime: string
  updateBy: string
  updateTime: string
  isDeleted: number
}

// 角色权限关联
export interface RolePermission {
  id: number
  roleId: number
  permissionId: number
  createdBy: string
  createdTime: string
  updateBy: string
  updateTime: string
  isDeleted: number
}

// 登录表单
export interface LoginForm {
  phone: string       // 手机号码
  captcha?: string
}

// 登录响应
export interface LoginResponse {
  token: string
  avatar?: string,
  id?: number,
  nickName?: string
}

// 文件上传响应
export interface UploadResponse {
  url: string          // 文件访问URL
  fileName: string     // 文件名
  fileSize: number     // 文件大小
}

// 路由元信息接口
export interface RouteMeta {
  title: string           // 页面标题
  icon?: string          // 菜单图标
  permission?: string    // 权限标识
  hidden?: boolean       // 是否隐藏菜单
  keepAlive?: boolean    // 是否缓存组件
  breadcrumb?: boolean   // 是否显示面包屑
}

// 扩展的路由配置
export interface AppRouteRecordRaw {
  path: string
  name?: string
  component?: any
  redirect?: string
  meta?: RouteMeta
  children?: AppRouteRecordRaw[]
}

// 学校管理员映射表
export interface SchoolAdmin {
  id: number
  schoolId: number
  adminId: number
  createTime: string
  createBy: string
  updateTime: string
  updateBy: string
  isDeleted: number
  nickName: string    // 管理员昵称（关联查询字段）
  avatar: string      // 管理员头像（关联查询字段）
  realName: string    // 管理员真实姓名（关联查询字段）
  schoolInfo: string  // 学校信息 名字-校区（关联查询字段）
}

// 学校管理员分页查询参数
export interface SchoolAdminPageParams extends PageParams {
  id?: number
  schoolId?: number
  adminId?: number
  createdTime?: string
  createdBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
  realName?: string
}

// 学校管理员创建请求
export interface SchoolAdminCreateRequest {
  schoolId: number
  adminId: number
  realName: string    // 真实姓名
}

// 根据手机号查询用户信息的响应
export interface UserByPhoneResponse {
  id: number
  userType: string
  openid: string
  nickName: string
  avatar: string
  schoolId: number
  studentId: string
  email: string
  defaultAvatar: string
  defaultNickName: string
  sex: number
  phone: string
  grade: string
  userStatus: string
}

// 帖子分类基础接口
export interface PostCategory {
  id: number
  categoryName: string      // 分类名称
  categorySort: number      // 分类排序（数字越小越靠前）
  isEnabled: number         // 是否启用：0-禁用 1-启用
  createTime: string        // 创建时间
  createBy: string          // 创建人
  updateTime: string        // 更新时间
  updateBy: string          // 更新人
  isDeleted: number         // 是否删除：0-未删除 1-已删除
}

// 帖子分类分页查询参数
export interface PostCategoryPageParams extends PageParams {
  id?: number
  categoryName?: string
  categorySort?: number
  isEnabled?: number
  createTime?: string
  createBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
}

// 帖子分类创建/更新请求
export interface PostCategoryRequest {
  id?: number
  categoryName: string
  categorySort: number
  isEnabled: number
}

// 帖子基础接口
export interface Post {
  id: number
  userId: number                // 发布用户ID
  schoolId: number             // 学校ID
  categoryId: number           // 分类ID
  title: string                // 帖子标题
  content: string              // 帖子内容
  images: string               // 图片列表（JSON数组格式存储URL）
  isAnonymous: number          // 是否匿名：0-实名/1-匿名
  postStatus: string           // 帖子状态：published-已发布/pending-审核中/hidden-隐藏
  viewCount: number            // 浏览数
  likeCount: number            // 点赞数
  commentCount: number         // 评论数
  isPinned: number             // 是否置顶：0-否/1-是
  pinExpireTime: string        // 置顶过期时间
  createTime: string           // 创建时间
  createBy: string             // 创建人
  updateTime: string           // 修改时间
  updateBy: string             // 修改人
  isDeleted: number            // 是否删除：1-删除/0-未删除
  postTagList: string[]        // 话题标签列表
  postImages: string[]         // 帖子图片列表
  isLike: boolean              // 是否点赞
  // 关联字段（用于显示）
  userNickName?: string        // 发布者昵称
  userAvatar?: string          // 发布者头像
  categoryName?: string        // 分类名称
  schoolName?: string          // 学校名称
}

// 帖子分页查询参数
export interface PostPageParams extends PageParams {
  id?: number
  userId?: number
  schoolId?: number
  categoryId?: number
  title?: string
  content?: string
  isAnonymous?: number
  postStatus?: string
  isPinned?: number
  createTime?: string
  createBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
}

// 帖子创建/更新请求
export interface PostRequest {
  id?: number
  userId?: number
  schoolId?: number
  categoryId?: number
  title?: string
  content?: string
  images?: string
  isAnonymous?: number
  postStatus?: string
  isPinned?: number
  pinExpireTime?: string
  postTagList?: string[]
  postImages?: string[]
}

// 话题信息接口
export interface PostTag {
  id: number
  postTagName: string          // 话题名称
  description: string          // 话题描述
  isGlobal: number             // 是否全局话题：0-学校专属/1-全局
  usageCount: number           // 使用次数
  isPinned: number             // 是否置顶话题：0-否/1-是
  tagSort: number              // 话题排序，数字越小越靠前
  createTime: string           // 创建时间
  createBy: string             // 创建人
  updateTime: string           // 修改时间
  updateBy: string             // 修改人
  isDeleted: number            // 是否删除：1-删除/0-未删除
}

// 话题分页查询参数
export interface PostTagPageParams extends PageParams {
  id?: number
  postTagName?: string         // 话题名称
  description?: string         // 话题描述
  isGlobal?: number           // 是否全局话题：0-学校专属/1-全局
  isPinned?: number           // 是否置顶话题：0-否/1-是
  schoolId?: number           // 学校ID
  isCurrentSchool?: number    // 是否当前学校话题：0-当前学校/1-全部话题
}

// 话题创建/更新请求
export interface PostTagRequest {
  id?: number
  postTagName?: string
  description?: string
  isGlobal?: number
  isPinned?: number
  tagSort?: number
}

// 评论基础接口（基于接口文档 SCommentResponseVO）
export interface Comment {
  id: number
  userId: number                // 评论用户ID（关联user表id）
  sourceId: number             // 关联来源ID（帖子ID或闲置物品ID）
  sourceType: string           // 来源类型：post-帖子/idle-闲置物品
  parentId: number | null      // 父评论ID（关联本表id，NULL表示一级评论）
  rootId: number | null        // 根评论ID（关联本表id，NULL表示一级评论）
  content: string              // 评论内容
  images: string               // 评论图片（JSON数组格式存储URL）
  isAnonymous: number          // 是否匿名：0-实名/1-匿名
  isHidden: number             // 是否被隐藏：0-否/1-是（敏感内容自动隐藏）
  hiddenReason: string         // 隐藏原因
  commentStatus: string        // 状态：published-已发布/hidden-已隐藏/deleted-已删除
  likeCount: number            // 点赞数
  replyCount: number           // 回复数
  createTime: string           // 创建时间
  createBy: string             // 创建人
  updateTime: string           // 修改时间
  updateBy: string             // 修改人
  isDeleted: number            // 是否删除：1-删除/0-未删除
  // 查询返回的关联字段
  postTitle?: string           // 帖子标题
  commenter?: string           // 评论者
  replyer?: string            // 回复者
  commentImages?: string[]     // 评论图片列表
}

// 评论分页查询参数（基于接口文档 SCommentRequestPageVO）
export interface CommentPageParams extends PageParams {
  id?: number
  userId?: number
  sourceId?: number
  sourceType?: string          // post-帖子/idle-闲置物品
  parentId?: number
  rootId?: number
  content?: string
  images?: string
  isAnonymous?: number         // 0-实名/1-匿名
  isHidden?: number            // 0-否/1-是
  hiddenReason?: string
  commentStatus?: string       // published-已发布/hidden-已隐藏/deleted-已删除
  likeCount?: number
  replyCount?: number
  createTime?: string
  createBy?: string
  updateTime?: string
  updateBy?: string
  isDeleted?: number
}

// 评论创建/更新请求（基于接口文档 SCommentRequestVO）
export interface CommentRequest {
  id?: number
  userId?: number
  sourceId?: number
  sourceType?: string
  parentId?: number
  rootId?: number
  content?: string
  images?: string
  isAnonymous?: number
  isHidden?: number
  hiddenReason?: string
  commentStatus?: string
  likeCount?: number
  replyCount?: number
  commentImages?: string[]
  beginTime?: string
  endTime?: string
}

// 评论统计查询参数
export interface CommentStatisticsParams {
  sourceType: string               // 必传：post-帖子/idle-闲置物品
  beginTime?: string              // 开始时间
  endTime?: string                // 结束时间
}

// 用户信息DTO（基于接口文档 UserInfoDTO）
export interface UserInfo {
  id: number
  userType: string
  openid: string
  nickName: string
  avatar: string
  schoolId: number
  studentId: string
  email: string
  defaultAvatar: string
  defaultNickName: string
  sex: number
  phone: string
  grade: string
  userStatus: string
  lastLoginTime: string
  lastIp: string
  loginCount: number
  roleKey: string
}

// 评论树形节点（基于接口文档 CommentTreeNodeVO）
export interface CommentTreeNode {
  id: number
  userId: number
  sourceId: number
  sourceType: string
  parentId: number | null
  rootId: number | null
  content: string
  images: string
  isAnonymous: number
  isHidden: number
  hiddenReason: string
  commentStatus: string
  likeCount: number
  replyCount: number
  createTime: string
  createBy: string
  updateTime: string
  updateBy: string
  isDeleted: number
  commentImages: string[]
  userInfo: UserInfo
  children: CommentTreeNode[]
  isCurrentUser: boolean
  liked: boolean
}

// 评论树形结构（基于接口文档 CommentTreeVO）
export interface CommentTree {
  totalCount: number
  rootComments: CommentTreeNode[]
}

// 评论数据统计（基于接口文档 SCommentDataStatisticsVO）
export interface CommentStatistics {
  commentCount: number         // 评论总数
  replyCount: number          // 回复总数
  growthRate: number          // 增长率
  commentRiskCount: number    // 风险评论数
}

// 每日评论统计（基于接口文档 DailyCommentStatisticsVO）
export interface DailyCommentStatistics {
  date: string
  count: number
}

// 话题使用趋势数据
export interface TagUsageTrend {
  date: string
  globalUsage: number
  schoolUsage: number
}

// 话题类型分布数据
export interface TagTypeDistribution {
  global: number
  school: number
}

// 话题概览数据
export interface TagOverview {
  totalTags: number
  globalTags: number
  pinnedTags: number
  totalUsage: number
  typeDistribution: TagTypeDistribution
  usageTrends: TagUsageTrend[]
}

// 热门话题排行数据
export interface HotTagRank {
  tagName: string
  usageCount: number
} 